	/**
 * 
 */
package modelo.gestionFacturacion;

import java.awt.*;
import java.awt.JobAttributes.DialogType;
import java.util.*;

import aplicaciones.Main;


import modelo.gestionPedidos.Pedido;


/**
 * @author Ana Belén Pelegrina Ortiz
 *
 */
public class Factura {
	
	
	@SuppressWarnings("unused")
	private class Impresora {
		int numlineas;
		PrintJob pjob;
		Graphics pg;
		Font grande,peque;

		public Impresora() {
		}

		public boolean inicializar(String nombredoc) {
			numlineas=0;
			grande = new Font( "SansSerif",Font.PLAIN,16 );
			peque = new Font( "SansSerif",Font.PLAIN,12 );

		    Frame f = new Frame( "" );
		    f.pack();
		    
		    JobAttributes atributosImpresion = new JobAttributes();
		    atributosImpresion.setCopies(2);
		    atributosImpresion.setDialog(DialogType.NONE);

		    pjob = f.getToolkit().getPrintJob(f, nombredoc, atributosImpresion, null);
		    
		    if (pjob != null) {
	
			    pg = pjob.getGraphics();
	
			    pg.setFont(peque);
		    
			    return true;
			}
		    else 
		    	return false;
		    
		}

		public boolean finalizar() {
			if (pjob != null){
			    pg.dispose();
			    pjob.end();
				return true;
			}
			else return false;
		}

		public void imprimeLinea(String nomseccion, int indent) {
			if (pjob!=null){
				numlineas+=2;
			    pg.setFont(peque);
			    addlinea(nomseccion, indent);
			}

		}

		public boolean addlinea(String linea, int indent) {
			
			if (pjob != null){
				if (numlineas>70) {
	
				    pg.dispose();
					pg = pjob.getGraphics();
					numlineas=0;
				}
	
				pg.drawString(linea, indent, 60+numlineas*10);
	
	
				return true;
			}
			else 
				return false;
		}
		
	}

	
	private int numFactura;
	private Date fecha;
	private String nombreCliente;
	private char formaPago;
	private double total;
	private double descuento;
	private double totalConIVA;
	private Pedido pedido;
	
	public static final int IVA = 7;
	
	
	public Factura( Pedido p, int numeroFactura, Date date, char FormaPago, String nombre, double Descuento){
		nombreCliente = nombre;
		descuento = Descuento;
		fecha = date;
		formaPago = FormaPago;
		numFactura = numeroFactura;
		pedido = p;
		
		total = (p.CalcularTotalPedido() - descuento) * (100.-IVA)/100.;
		totalConIVA = total * 100./(100.-IVA);
		
	}


	public double getDescuento() {
		return descuento;
	}


	public Date getFecha() {
		return fecha;
	}


	public char getFormaPago() {
		return formaPago;
	}


	public double getTotal() {
		return total;
	}


	public String getNombreCliente() {
		return nombreCliente;
	}


	public int getNumFactura() {
		return numFactura;
	}
	
	public String toString(){
		
		return "";
		
	}
	
	public void imprimir(){
		Impresora imp = new Impresora();
		
		
		imp.inicializar("Factura");
	
		
		
		
		String separador = "====================================";
		String cadena = "";
		
		imp.imprimeLinea( "Restaurante " + Main.m_Restaurante.getNombre(),80);
		imp.imprimeLinea( "CIF:  " + Main.m_Restaurante.getCIF(), 80 );
		imp.imprimeLinea( "Tlf:    " + Main.m_Restaurante.getTlfno(), 80);
		imp.imprimeLinea("Dirección:  " + Main.m_Restaurante.getDireccion(), 80);
		imp.imprimeLinea("Datos Restaurante\n",80);
		imp.imprimeLinea(separador,80);
		imp.imprimeLinea("Cliente: " + nombreCliente,80); 
		imp.imprimeLinea("Datos de la factura: " + this.fecha + "  " + this.numFactura,80);
		cadena = "Forma de Pago:    "; 
		switch (this.formaPago){
			case 'e': cadena += "  Efectivo\n\n"; break;
			case 't': cadena += "  Tarjeta\n\n"; break;
		}
		
		imp.imprimeLinea(cadena,80);
		imp.imprimeLinea(separador,80);
		
		for (int i=0; i<this.pedido.getConsumiciones().size(); ++i){
			
			imp.imprimeLinea(pedido.getConsumiciones().get(i).getProducto().toString(),80);
			imp.imprimeLinea(pedido.getConsumiciones().get(i).getProducto().consultarPrecio() + "",240);
		} 
		
		imp.imprimeLinea(separador,80);
		imp.imprimeLinea("Total:                      " + Math.round(total * 100.)/100.,80);
		imp.imprimeLinea("Total + IVA:                " +  Math.round(totalConIVA * 100.)/100. , 80);
		imp.imprimeLinea("¡Gracias por Elegirnos!",80);
		
		
		imp.finalizar();
	}

}
